/*@author cerimice*/
package Persistencia.Fachada;

import Sistema.Configuracion;
import Persistencia.Definicion.CierreOrdenServicio;

import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import javax.persistence.Query;
import java.util.logging.Logger;
import javax.persistence.Persistence;
import javax.persistence.EntityManager;

public class CierreOrdenServicioFachada
    {
     private EntityManager em;
    
    public CierreOrdenServicioFachada()
        {}
    
    private EntityManager getEntityManager()
        {return Persistence.createEntityManagerFactory(Sistema.Configuracion.getUnidadDePersistencia()).createEntityManager();}                
    
    public boolean agregar(String ordenServicio,Date fecha,String ticket, float montoManoObra, float montoRefacciones,String comentario) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                CierreOrdenServicio obj = new CierreOrdenServicio();
                obj.setOrdenServico(ordenServicio);
                obj.setFecha(fecha);
                obj.setTicket(ticket.toUpperCase());
                obj.setMontoManoObra(montoManoObra);
                obj.setMontoRefacciones(montoRefacciones);
                obj.setComentario(comentario.toUpperCase());
            em.persist(obj);
            em.flush();
            em.getTransaction().commit();
            em.close();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean modificar(String clave,String ticket, float montoManoObra, float montoRefacciones, String comentario) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                CierreOrdenServicio obj = em.find(CierreOrdenServicio.class,clave);
                if(obj == null){return false;}
                obj.setTicket(ticket.toUpperCase());
                obj.setMontoManoObra(montoManoObra);
                obj.setMontoRefacciones(montoRefacciones);
                obj.setComentario(comentario.toUpperCase());
            em.persist(obj);
            em.flush();
            em.getTransaction().commit();
            em.close();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public CierreOrdenServicio obtener(String clave) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                CierreOrdenServicio obj = em.find(CierreOrdenServicio.class,clave);
            em.getTransaction().commit();
            em.close();
            return obj;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public CierreOrdenServicio obtenerPorOrden(String orden) throws Exception
        {
        try
            {
            List<CierreOrdenServicio> lista = new ArrayList<>(1);
            em = this.getEntityManager();
            Query consulta = null;
            consulta = em.createNamedQuery("cierreOrdenServicio.listaOrdenServicio2");
                consulta.setParameter("valor",orden);
                List<CierreOrdenServicio> resultado = consulta.getResultList();
                for(CierreOrdenServicio obj:resultado){lista.add(obj);}
            return lista.get(lista.size()-1);
            }
        catch(IndexOutOfBoundsException Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    }
